ERROR_TYPE = [('other', 'other'), ('user', 'user'), ('onchange', 'onchange'), ('depends', 'depends'), ('constrains', 'constrains'), ('orm', 'ORM'), ('sql', 'SQL'), ('selection', 'selection')]


class RESErrorJSON(object):
    """
    Model:
        满足操作错误json的所有算法逻辑

    Param:
        - env: odoo env

    Function:
        - get_error_code: 根据消息获取错误代码，如果没有获取到，则创建一个并返回代码
    """

    def __init__(self, env):
        self.env = env

    def get_error_code(self, type, desc):
        """
        根据消息获取错误代码，如果没有获取到，则创建一个并返回代码

        :param type: 类型
        :param desc: 错误信息

        @return code
        """
        is_valid_type = any(type == error_type[0] for error_type in ERROR_TYPE)
        if not is_valid_type:
            raise ValueError('ERROR_TYPE类型选择错误')

        error_json = self.env['res.error.json'].search([('type', '=', type), ('desc', '=', desc)])
        if not error_json:
            error_json = self.env['res.error.json'].create([('desc', '=', desc)])

        return error_json.code
